package cn.wolfcode.luowowo.search.service;

import cn.wolfcode.luowowo.search.query.SearchQuery;
import org.springframework.data.domain.Page;

/**
 * 所有 es 公共服务，全文搜索并高亮显示关键词
 */
public interface ISearchService {

    /**
     * 全文搜索 + 高亮显示
     *
     * @param index  索引
     * @param type   类型
     * @param clz    通过字节码对象告诉Page<T>中的 T 到底是什么类型，传什么封装什么
     * @param qo     高查条件（关键词等）都在qo中
     * @param fields 字段：需要对哪些字段中的内容做关键词匹配，不同的需求字段不一样，可变参数可完美匹配
     * @param <T>
     * @return 带有分页的全文搜索(高亮显示)结果集，返回的结果集用泛型来达到通用的目的
     * <p>
     * <T> 泛型方法的语法：  申明泛型，让java不去解析 T 具体是什么类型，不加就报无法解析的错。
     */
    <T> Page<T> searchWithHighlight(String index, String type, Class<T> clz,
                                    SearchQuery qo, String... fields);

}
